﻿using System.Net;

namespace Basic.Repository.Abstract.Models;

public class MessageModel<T>
{
    /// <summary>
    /// 状态码
    /// </summary>
    public HttpStatusCode Status { get; set; } = HttpStatusCode.OK;
    /// <summary>
    /// 操作是否成功
    /// </summary>
    public bool Success { get; set; } = false;
    /// <summary>
    /// 返回信息
    /// </summary>
    public string Msg { get; set; } = "";

    public T Response { get; set; }

    public static MessageModel<T> Succeeded(string msg = "成功")
    {
        return Message(true, msg, default, 200);
    }

    /// <summary>
    /// 返回成功
    /// </summary>
    /// <param name="msg">消息</param>
    /// <param name="response">数据</param>
    /// <returns></returns>
    public static MessageModel<T> Succeeded(T response, string msg = "成功")
    {
        //return Message(true, msg, response);
        return Message(true, msg, response, 200);
    }

    /// <summary>
    /// 返回失败
    /// </summary>
    /// <param name="msg">消息</param>
    /// <returns></returns>
    public static MessageModel<T> Failed(string msg = "失败")
    {
        return Message(false, msg, default, 500);
    }

    public static MessageModel<T> Failed(T response, string msg)
    {
        return Message(false, msg, response, 500);
    }

    public static MessageModel<T> Message(bool success, string msg, T response)
    {
        return new MessageModel<T>() { Msg = msg, Response = response, Success = success };
    }

    public static MessageModel<T> Message(bool success, string msg, T response, int status)
    {
        return new MessageModel<T>() { Msg = msg, Response = response, Success = success, Status = (HttpStatusCode)status };
    }

    public static MessageModel<T> Unauthorized(string msg = "未授权")
    {
        return Message(false, msg, default, 401);
    }

}

public class MessageModel : MessageModel<object>
{

}